package com.gitee.attendance.util.baidu;

import java.util.ArrayList;

import com.baidu.aip.face.FaceVerifyRequest;
import com.baidu.aip.face.MatchRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class FaceUtil {

    private Logger logger = LoggerFactory.getLogger(FaceUtil.class);

    @Autowired
    public CurrencyUtil currencyUtil;

    /**
     * 根据BASE64进行人脸相似度比对
     * 
     * @param base1 第一张图片 
     * @param base1Type 第一张图片上传方式 BASE64 or URL
     * @param base2 第二张图片 
     * @param base2Type 第二张图片上传方式 BASE64 or URL
     * @return JSON "score"值为相似度
     */
    public JSONObject faceMatch(String base1, String base1Type, String base2, String base2Type) {

        MatchRequest req1 = new MatchRequest(base1, base1Type);
        MatchRequest req2 = new MatchRequest(base2, base2Type);

        ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();

        requests.add(req1);
        requests.add(req2);

        JSONObject res = currencyUtil.getAipFace().match(requests);
        logger.info(res.toString());

        return res;
    }
    /**
     * 根据BASE64进行人脸相似度比对
     * 
     * @param base1 第一张图片 
     * @param base2 第二张图片
     * @param baseType 两张图片上传方式 BASE64 or URL
     * @return JSON "score"值为相似度
     */
    public JSONObject faceMatch(String base1, String base2, String baseType) {
        return faceMatch(base1, baseType, base2, baseType);
    }
    /**
     * 根据BASE64进行人脸相似度比对
     * 
     * @param base1 第一张图片 按照 BASE64 方式上传 
     * @param base2 第二张图片 按照 BASE64 方式上传 
     * @return JSON "score"值为相似度
     */
    public JSONObject faceMatch(String base1, String base2) {
        return faceMatch(base1, base2, CurrencyUtil.BASE64);
    }

    /**
     * 根据BASE64进行活体检测
     * 
     * @param base
     * @return JSON "face_liveness"值为相似度
     */
    public JSONObject faceVerify(String base) {
        FaceVerifyRequest req = new FaceVerifyRequest(base, CurrencyUtil.BASE64);
        ArrayList<FaceVerifyRequest> list = new ArrayList<FaceVerifyRequest>();
        list.add(req);
        JSONObject res = currencyUtil.getAipFace().faceverify(list);
        logger.info(res.toString());

        return res;
    }

}